package Funcionalidades.ABMCompetencia;

import Funcionalidades.Menues.FrameUsuarioAutenticado;
import Funcionalidades.Menues.MyTableModel;
import Funcionalidades.Menues.iDialogGeneral;
import Gestores.GestorLugarDeRealizacion;
import Gestores.GestorUsuario;
import Entidades.EntidadesDTO.DisponibilidadDTO;
import Entidades.EntidadesDTO.LugarDeRealizacionDTO;
import Entidades.EntidadesLogica.*;


import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.Vector;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;

public class iBuscarLugares extends iDialogGeneral {

	private static final long serialVersionUID = 1L;
	private final JPanel contentPanel = new JPanel();
	
	private JButton okButton,cancelButton;
	private JTable tableDisponible;
	private JTable tableCompetencia;
	
	public Vector<DisponibilidadDTO> getLugaresElegidos() {
		return lugaresElegidosFinales;
	}



	private Vector<DisponibilidadDTO> lugaresElegidosFinales= new Vector<DisponibilidadDTO>();
	
	private Vector<LugarDeRealizacion> lugaresDisponiblesModificados= new Vector<LugarDeRealizacion>();
	private Vector<DisponibilidadDTO> lugaresElegidosModificados= new Vector<DisponibilidadDTO>();
	


	private GestorLugarDeRealizacion gLugares;
	private GestorUsuario gUser;
	
	


	public iBuscarLugares(FrameUsuarioAutenticado perteneciente, boolean modal) {
		
		super(perteneciente,modal);
		
		gLugares=gLugares.getGestorLugarDeRealizacion();
		gUser=gUser.getGestorUsuario();
		
		try {
			lugaresDisponiblesModificados=gLugares.getLugaresRealizacion(gUser.getUsuarioLogueado());
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		

		lugaresElegidosModificados=new Vector<DisponibilidadDTO>();
		
		
		
		Dimension tam= new Dimension(400, 500);
		setTamanio(tam);
		
	
		getContentPane().setLayout(new BorderLayout());
		JPanel panelTitulo = new JPanel();
		getContentPane().add(panelTitulo, BorderLayout.NORTH);
		
		JLabel lblTitulo = new JLabel("Lugares de Realizaci\u00F3n");
		lblTitulo.setFont(new Font("Vani", Font.PLAIN, 20));
		panelTitulo.add(lblTitulo);
		
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));	
		
		JScrollPane scpDisponibles = new JScrollPane();
		scpDisponibles.setBorder(new TitledBorder(null, "Disponibles", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		contentPanel.add(scpDisponibles);
		
				
		tableDisponible = new JTable();
		tableDisponible.setRowSelectionAllowed(true);
		tableDisponible.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
		tableDisponible.setModel(new lugaresDelUsuarioTableModel(lugaresDisponiblesModificados));

		scpDisponibles.setViewportView(tableDisponible);
		
		
		JPanel panel = new JPanel();
		contentPanel.add(panel);
		
		JButton btnAgregar = new JButton("Agregar");
		panel.add(btnAgregar);
		btnAgregar.setPreferredSize(datos);
		btnAgregar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int linea=tableDisponible.getSelectedRow();
					if(linea>=0){
						LugarDeRealizacion l= lugaresDisponiblesModificados.get(linea);
						DisponibilidadDTO dispdto=new DisponibilidadDTO(new LugarDeRealizacionDTO(l.getCodigo(), l.getNombre(), l.getDescripcion(), l.getDeportesAsociados(), l.getFecha_baja()), 1);
						lugaresElegidosModificados.add(dispdto);
						lugaresDisponiblesModificados.remove(linea);
						tableDisponible.setModel(new lugaresDelUsuarioTableModel(lugaresDisponiblesModificados));
						tableCompetencia.setModel(new lugaresCompetenciaTableModel(lugaresElegidosModificados));
						}
					}});
		
		
		JButton btnQuitar = new JButton("Quitar");
		panel.add(btnQuitar);
		btnQuitar.setPreferredSize(datos);
		btnQuitar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int linea=tableCompetencia.getSelectedRow();
					if(linea>=0){

						
						LugarDeRealizacionDTO ldto= lugaresElegidosModificados.get(linea).getLugar();
						LugarDeRealizacion l= new LugarDeRealizacion(ldto);
						lugaresElegidosModificados.remove(linea);
						lugaresDisponiblesModificados.add(l);
						tableDisponible.setModel(new lugaresDelUsuarioTableModel(lugaresDisponiblesModificados));
						tableCompetencia.setModel(new lugaresCompetenciaTableModel(lugaresElegidosModificados));
						
						
						
						}
					}
						
		});
		
		
		
		JScrollPane scpCompetencia = new JScrollPane();
		scpCompetencia.setBorder(new TitledBorder(null, "Competencia", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		contentPanel.add(scpCompetencia);
		
		tableCompetencia = new JTable();
		tableCompetencia.setModel(new lugaresCompetenciaTableModel(lugaresElegidosModificados));
		scpCompetencia.setViewportView(tableCompetencia);
		tableCompetencia.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
		tableCompetencia.setRowSelectionAllowed(true);
		
				
					
		JPanel buttonPane = new JPanel();
		buttonPane.setLayout(new FlowLayout(FlowLayout.CENTER));
		getContentPane().add(buttonPane, BorderLayout.SOUTH);
		buttonPane.setMaximumSize(this.panel);
		
		okButton = new JButton("Aceptar");
		okButton.setActionCommand("OK");
		buttonPane.add(okButton);
		okButton.setPreferredSize(datos);
		okButton.addActionListener(new aceptarButtonAction());
	
		
		Component horizontalStrut = Box.createHorizontalStrut(20);
		buttonPane.add(horizontalStrut);
		
		
		cancelButton = new JButton("Cancelar");
		cancelButton.setPreferredSize(datos);
		cancelButton.setActionCommand("Cancel");
		buttonPane.add(cancelButton);
		cancelButton.addActionListener(new cancelButtonAction());
		
		
		
		
		
		
	}
	
	public class cancelButtonAction extends AbstractAction{

		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent arg0) {
			getParent().setFocusable(true);
			dispose();
		}
		
	}
	public class aceptarButtonAction extends AbstractAction{

		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent arg0) {
			lugaresElegidosFinales=lugaresElegidosModificados;
			getParent().setFocusable(true);
			dispose();
		}
		
	}
		class lugaresDelUsuarioTableModel extends MyTableModel{
		

		private static final long serialVersionUID = 1L;

		public lugaresDelUsuarioTableModel(Vector<LugarDeRealizacion> lugares){
			super();
			String[] columnas={"CODIGO","NOMBRE"};
			
			Object[][] info= new Object[lugares.size()][2];
			setColumnNames(columnas);
			
			for(int i=0;i<lugares.size();i++){
				info[i][0]=lugares.get(i).getCodigo();
				info[i][1]=lugares.get(i).getNombre();
			}
			
			setInfo(info);
			boolean[] edits= {false,false};
			setEdits(edits);
			
		}
	}
	
	
	class lugaresCompetenciaTableModel extends MyTableModel{
		
		private static final long serialVersionUID = 1L;
		private Object[][] info;
		private Vector<DisponibilidadDTO> disp;
		
        public void setValueAt(Object value, int row, int col) {
           
          
            disp.get(row).setCantidad((int)value);
            
            info[row][col] = value;
            fireTableCellUpdated(row, col);
 
        }

		public lugaresCompetenciaTableModel(Vector<DisponibilidadDTO> disponibilidades){
			super();
			String[] columnas={"CODIGO","NOMBRE","CANTIDAD"};
			this.disp=disponibilidades;
			info= new Object[disponibilidades.size()][3];
			setColumnNames(columnas);
			for(int i=0;i<disponibilidades.size();i++){
				info[i][0]=disponibilidades.get(i).getLugar().getCodigo();
				info[i][1]=disponibilidades.get(i).getLugar().getNombre();
				info[i][2]=disponibilidades.get(i).getCantidad();
			}
			
			setInfo(info);
			boolean[] edits= {false,false,true};
			setEdits(edits);
			
		}
	}
	
}